import 'dart:convert';
import 'dart:io';

import 'package:dartkit/dartkit.dart';
import 'package:test/test.dart';

class People extends Jsonable {
  String name;
  People(this.name);

  @override
  Json toJson() => {
        "name": name,
      };
}

void main() {
  final File file = File("./test.txt");

  tearDown(() => file.deleteSync());

  test("创建文件功能", () {
    // 刚开始时文件不存在
    expect(file.existsSync(), isFalse);
    // 创建后，文件存在
    file.initIf();
    expect(file.existsSync(), isTrue);
  });

  test("初始化(String)", () {
    // 使用简单的内容初始化文件
    file.initIf("abc");
    expect(file.readAsStringSync(), "abc");
  });

  test("初始化(List)", () {
    // 刚开始时文件不存在
    expect(file.existsSync(), isFalse);

    // 使用List初始化文件
    file.initIf([]);
    expect(file.readAsStringSync(), "[]");
  });

  test("初始化(Map)", () {
    // 刚开始时文件不存在
    expect(file.existsSync(), isFalse);

    // 使用Map初始化文件
    file.initIf({
      "a": "b",
      "c": 1.0,
      "d": true,
      "e": 1,
    });
    expect(file.readAsStringSync(), '{"a":"b","c":1.0,"d":true,"e":1}');
  });

  test("初始化(空Map)", () {
    // 刚开始时文件不存在
    expect(file.existsSync(), isFalse);

    // 使用Map初始化文件
    file.initIf({});
    expect(file.readAsStringSync(), '{}');
  });

  test("初始化(空List)", () {
    // 刚开始时文件不存在
    expect(file.existsSync(), isFalse);

    // 使用Map初始化文件
    file.initIf([]);
    expect(file.readAsStringSync(), '[]');
  });

  test("初始化（Raw对象）", () {
    final people = People("lucid");
    file.initIf(people);

    expect(jsonDecode(file.readAsStringSync())["name"], "lucid");
  });

  test("不覆盖", () {
    // 如果已经有内容写入
    file.initIf("abc");

    // 那么不会覆盖原有内容
    file.initIf([]);
    expect(file.readAsStringSync(), "abc");
  });
}
